#include <bits/stdc++.h>
#define int long long 
using namespace std;

const int maxn = 3e2 + 5;
int n;
int arr[maxn];
int prefix[maxn];
int dp[maxn][maxn]; // 合并 [l,r] 需要的最小花费

void solve(){
	cin >>n;
	for (int i=1;i<=n;i++) {
		cin >>arr[i];
		prefix[i] = prefix[i-1]+arr[i];
	}
	
	memset(dp, 0x3f, sizeof(dp));
	for (int i=1;i<=n;i++) {
		dp[i][i]=0;
	}
	
	// 进行区间 dp
	for (int len=2;len<=n;len++) { // 遍历每个区间
		for (int i=1;i+len-1<=n;i++) { // 左端点
			int j=i+len-1; // 右端点
			
			for (int k=i;k<j;k++) { // 分割点
				
				dp[i][j] = min(dp[i][j], dp[i][k]+dp[k+1][j]+prefix[j]-prefix[i-1]);
			}
		}
	}
	cout << dp[1][n] << '\n';
}

signed main(){
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	solve();
	return 0;
}

